Aller au contenu

Proxy (patron de conception)

Un article de Wikipédia, l'encyclopédie libre.
Proxy en UML

En programmation, un proxy est un patron de conception.

Un proxy est une classe se substituant à une autre classe. Par convention et simplicité, le proxy implémente la même interface que la classe à laquelle il se substitue[1]. L'utilisation de ce proxy ajoute une indirection à l'utilisation de la classe à substituer[1].

Usage[modifier | modifier le code]

Un proxy est utilisé principalement pour contrôler l'accès aux méthodes de la classe substituée[1]. Il est également utilisé pour simplifier l'utilisation d'un objet « complexe » à la base : par exemple, si l'objet doit être manipulé à distance (via un réseau) ou si l'objet est consommateur de temps[1].

Propriétés[modifier | modifier le code]

  • Un proxy est un cas particulier du patron de conception état ;
  • Un proxy implémente une et une seule interface (donc ne fournit qu'une seule classe) ;
  • Un état peut implémenter un nombre quelconque d'interfaces ;
  • Un état est utilisé pour changer dynamiquement d'interface.

Types[modifier | modifier le code]

Il existe 8 différents types de proxy :

  • Remote proxy : fournit une référence sur un objet situé sur un espace d'adressage différent, sur la même machine ou sur une autre ;
  • Virtual proxy : retarde l'allocation mémoire des ressources de l'objet jusqu'à son utilisation réelle ;
  • Copy-on-write proxy : fournit une forme de proxy virtuel pour retarder la copie de l'objet jusqu'à demande par la classe utilisatrice, utilisé notamment pour la modification concurrente par différents threads ;
  • Protection (access) proxy : fournit à chaque classe cliente un accès à l'objet avec des niveaux de protection différents ;
  • Firewall proxy : protège l'accès à l'objet par des classes « malveillantes » ou vice-versa ;
  • Synchronization proxy : fournit plusieurs accès à l'objet synchronisé entre différentes classes utilisatrices (cas de threads multiples) ;
  • Smart reference proxy : fournit des actions supplémentaires à chaque accès à l'objet (compteur de références, ...) ;
  • Cache proxy : stocke le résultat d'opérations coûteuse en temps, afin de pouvoir les partager avec les différentes classes utilisatrices .

Références[modifier | modifier le code]

  1. a b c et d (en) Erich Gamma, Richard Helm, Ralph Johnson et John Vlissides, Design Patterns : Elements of Reusable Object-Oriented Software, Addison-Wesley, , 395 p. (ISBN 0-201-63361-2, lire en ligne), p. 233-245

Voir aussi[modifier | modifier le code]